package py.com.erpone.entity.dm;

import java.util.Date;
import java.util.HashMap;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Transient;

@Entity
@NamedQueries(value={@NamedQuery(name="ordenCompra.all",query="select p from OrdenCompra p order by p.id"),
		@NamedQuery(name="ordenCompra.importarARecepcionPedido",
		query="select p " +
			  "from OrdenCompra p " +
			  "where p.situacion in ('O', 'P')" +		  
			  "and not exists(select l " +
			  "				 from Lote l" +
			  "				 where l.ordenCompra.id = p.id) " +
			  "order by p.id")})
public class OrdenCompra {
	public static final String SITUACION_ABIERTO = "O";
	public static final String SITUACION_PAGADO = "P";
	public static final String SITUACION_CANCELADO = "C";
	private static final HashMap<String, String> listSituacion = new HashMap<String, String>();

	static
	{
		listSituacion.put("Abierto", "O");
		listSituacion.put("Pagado", "P");
		listSituacion.put("Cancelado", "C");
	}
	

	@Id
	@GeneratedValue
	private Long id;
	@OneToOne(fetch=FetchType.EAGER)
	  @JoinColumn(name="SOLICITUDCOTIZACION_ID")
	private SolicitudCotizacion solicitudCotizacion;
	@Transient
	private String situacionExtenso;
	private String situacion;
	private Date fecha;


	public OrdenCompra() {
		super();

	}

	public OrdenCompra(Long id, SolicitudCotizacion solicitudCotizacion,
			String situacion, Date fecha) {
		super();
		this.id = id;
		this.solicitudCotizacion = solicitudCotizacion;
		this.situacion = situacion;
		this.fecha = fecha;
	}


	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getSituacionExtenso() {
		return situacionExtenso;
	}

	public void setSituacionExtenso(String situacionExtenso) {
		this.situacionExtenso = situacionExtenso;
	}

	public SolicitudCotizacion getSolicitudCotizacion() {
		return solicitudCotizacion;
	}

	public void setSolicitudCotizacion(SolicitudCotizacion solicitudCotizacion) {
		this.solicitudCotizacion = solicitudCotizacion;
	}

	public String getSituacion() {
		return situacion;
	}

	public void setSituacion(String situacion) {
		this.situacion = situacion;
	}
	@Transient
	public HashMap<String, String> getListSituacion() {
		return listSituacion;
	}
	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public static String getSituacionGuardado() {
		return SITUACION_ABIERTO;
	}

	public static String getSituacionPagado() {
		return SITUACION_PAGADO;
	}

	public static String getSituacionCancelado() {
		return SITUACION_CANCELADO;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((fecha == null) ? 0 : fecha.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result
				+ ((situacion == null) ? 0 : situacion.hashCode());
		result = prime
				* result
				+ ((solicitudCotizacion == null) ? 0 : solicitudCotizacion
						.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		OrdenCompra other = (OrdenCompra) obj;
		if (fecha == null) {
			if (other.fecha != null)
				return false;
		} else if (!fecha.equals(other.fecha))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (situacion == null) {
			if (other.situacion != null)
				return false;
		} else if (!situacion.equals(other.situacion))
			return false;
		if (solicitudCotizacion == null) {
			if (other.solicitudCotizacion != null)
				return false;
		} else if (!solicitudCotizacion.equals(other.solicitudCotizacion))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "OrdenCompra [id=" + id + ", solicitudCotizacion="
				+ solicitudCotizacion + ", situacion=" + situacion + ", fecha="
				+ fecha + "]";
	}


}
